{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "40 399\n",
      "56 390\n",
      "105 360\n",
      "120 350\n",
      "140 336\n",
      "168 315\n",
      "210 280\n",
      "240 252\n",
      "840\n",
      "8\n",
      "0.02214670181274414\n"
     ]
    }
   ],
   "source": [
    "#EulerProject 第39题\n",
    "import time\n",
    "on = time.time()\n",
    "max_num = 3\n",
    "max_res = 120\n",
    "for p in range(1000//2,1001,2):#遍历所有可能的周长p——\n",
    "    #这里需要理解一下，如果p有n个a+b+c的组合，那么2p就也会有n个2a，2b，2c的组合，所以只计算一半就可以了\n",
    "    #另外，无论a,b,c怎么取值，p都只能是偶数\n",
    "    nums = 0\n",
    "    for a in range(2,int(p/3.414)+1):#假设a是最小的一个数，那么a的取值就只能小于p/(2+sqrt(2))\n",
    "        if p*(p-2*a)%(2*(p-a))==0:#这个条件是在那两个条件成立的前提下等价推出来的\n",
    "            nums += 1\n",
    "    if nums>max_num:\n",
    "        max_res,max_num= p,nums\n",
    "print(max_res)\n",
    "print(max_num)\n",
    "print(time.time()-on)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "10\n",
      "1\n",
      "55\n",
      "5\n",
      "370\n",
      "3\n",
      "2777\n",
      "7\n",
      "22222\n",
      "2\n",
      "185185\n",
      "1\n",
      "210\n"
     ]
    }
   ],
   "source": [
    "#EulerProject 第40题\n",
    "#d1 × d10 × d100 × d1000 × d10000 × d100000 × d1000000\n",
    "res = 1\n",
    "nums = [10,100,1000,10000,100000,1000000]#从10开始\n",
    "dics = {}\n",
    "last_sum = 0\n",
    "sums = 9\n",
    "digs = 1\n",
    "for num in nums:\n",
    "    while sums<num:#找到合适的位数\n",
    "        digs += 1\n",
    "        last_sum = sums\n",
    "        sums += 9*(10**(digs-1))*digs\n",
    "    #计算差了多少位\n",
    "    chawei = num - last_sum\n",
    "    if chawei%digs==0:\n",
    "        n = (chawei//digs)-1 \n",
    "    else:\n",
    "        n = (chawei//digs)\n",
    "    thenum = 10**(digs-1)+n\n",
    "    print(thenum)\n",
    "    dig_list = list(str(thenum))\n",
    "    print(dig_list[(chawei%digs)-1])\n",
    "    res = res * int(dig_list[(chawei%digs)-1])\n",
    "print(res)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "7652413\n"
     ]
    }
   ],
   "source": [
    "#EulerProject 第41题\n",
    "from math import sqrt\n",
    "\n",
    "def be_nums(j):#定义一个可以将组合变换为数字的函数\n",
    "    res = 0\n",
    "    for ji in j:\n",
    "        res = res*10 + ji\n",
    "    return res\n",
    "\n",
    "def is_prime(num):\n",
    "    if num<=1 or num%2==0:\n",
    "        return False\n",
    "    t = 3\n",
    "    res = True\n",
    "    while t <= sqrt(num)+1:\n",
    "        if num%t==0:\n",
    "            res = False\n",
    "            break\n",
    "        else:\n",
    "            t += 2\n",
    "    return res\n",
    "\n",
    "import itertools\n",
    "\n",
    "sets = [1,2,3,4,5,6,7,8,9]\n",
    "for digs in range(9,0,-1):\n",
    "    now_sets = sets[0:digs]\n",
    "    is_break = False\n",
    "    for it in list(itertools.permutations(now_sets,digs))[::-1]:\n",
    "        num = be_nums(it)\n",
    "        if is_prime(num):\n",
    "            print(num)\n",
    "            is_break = True\n",
    "            break\n",
    "    if is_break:\n",
    "        break"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Help on class permutations in module itertools:\n",
      "\n",
      "class permutations(builtins.object)\n",
      " |  permutations(iterable[, r]) --> permutations object\n",
      " |  \n",
      " |  Return successive r-length permutations of elements in the iterable.\n",
      " |  \n",
      " |  permutations(range(3), 2) --> (0,1), (0,2), (1,0), (1,2), (2,0), (2,1)\n",
      " |  \n",
      " |  Methods defined here:\n",
      " |  \n",
      " |  __getattribute__(self, name, /)\n",
      " |      Return getattr(self, name).\n",
      " |  \n",
      " |  __iter__(self, /)\n",
      " |      Implement iter(self).\n",
      " |  \n",
      " |  __new__(*args, **kwargs) from builtins.type\n",
      " |      Create and return a new object.  See help(type) for accurate signature.\n",
      " |  \n",
      " |  __next__(self, /)\n",
      " |      Implement next(self).\n",
      " |  \n",
      " |  __reduce__(...)\n",
      " |      Return state information for pickling.\n",
      " |  \n",
      " |  __setstate__(...)\n",
      " |      Set state information for unpickling.\n",
      " |  \n",
      " |  __sizeof__(...)\n",
      " |      Returns size in memory, in bytes.\n",
      "\n"
     ]
    }
   ],
   "source": [
    "help(itertools.permutations)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1\n",
      "78\n",
      "20\n",
      "59\n",
      "45\n",
      "49\n",
      "132\n",
      "39\n",
      "48\n",
      "50\n",
      "59\n",
      "91\n",
      "74\n",
      "77\n",
      "53\n",
      "105\n",
      "17\n",
      "74\n",
      "75\n",
      "24\n",
      "62\n",
      "60\n",
      "109\n",
      "58\n",
      "95\n",
      "9\n",
      "76\n",
      "89\n",
      "70\n",
      "166\n",
      "47\n",
      "56\n",
      "58\n",
      "50\n",
      "75\n",
      "44\n",
      "60\n",
      "41\n",
      "41\n",
      "50\n",
      "39\n",
      "50\n",
      "108\n",
      "115\n",
      "32\n",
      "71\n",
      "13\n",
      "55\n",
      "47\n",
      "23\n",
      "36\n",
      "88\n",
      "19\n",
      "14\n",
      "23\n",
      "28\n",
      "76\n",
      "25\n",
      "63\n",
      "80\n",
      "47\n",
      "49\n",
      "66\n",
      "75\n",
      "47\n",
      "127\n",
      "92\n",
      "81\n",
      "50\n",
      "89\n",
      "84\n",
      "15\n",
      "100\n",
      "66\n",
      "19\n",
      "50\n",
      "87\n",
      "63\n",
      "81\n",
      "80\n",
      "40\n",
      "86\n",
      "74\n",
      "98\n",
      "89\n",
      "56\n",
      "91\n",
      "128\n",
      "51\n",
      "57\n",
      "80\n",
      "116\n",
      "70\n",
      "91\n",
      "143\n",
      "78\n",
      "135\n",
      "93\n",
      "25\n",
      "52\n",
      "99\n",
      "52\n",
      "32\n",
      "57\n",
      "73\n",
      "64\n",
      "116\n",
      "73\n",
      "39\n",
      "68\n",
      "87\n",
      "20\n",
      "31\n",
      "64\n",
      "96\n",
      "82\n",
      "134\n",
      "64\n",
      "92\n",
      "125\n",
      "78\n",
      "147\n",
      "21\n",
      "120\n",
      "53\n",
      "56\n",
      "95\n",
      "64\n",
      "118\n",
      "100\n",
      "83\n",
      "119\n",
      "62\n",
      "83\n",
      "137\n",
      "65\n",
      "59\n",
      "51\n",
      "47\n",
      "48\n",
      "50\n",
      "31\n",
      "30\n",
      "17\n",
      "96\n",
      "7\n",
      "10\n",
      "38\n",
      "27\n",
      "21\n",
      "28\n",
      "21\n",
      "27\n",
      "34\n",
      "50\n",
      "60\n",
      "7\n",
      "26\n",
      "28\n",
      "97\n",
      "56\n",
      "43\n",
      "11\n",
      "72\n",
      "51\n",
      "37\n",
      "81\n",
      "101\n",
      "42\n",
      "39\n",
      "60\n",
      "55\n",
      "57\n",
      "55\n",
      "61\n",
      "44\n",
      "46\n",
      "70\n",
      "74\n",
      "65\n",
      "18\n",
      "35\n",
      "29\n",
      "33\n",
      "57\n",
      "31\n",
      "29\n",
      "43\n",
      "48\n",
      "73\n",
      "52\n",
      "40\n",
      "40\n",
      "38\n",
      "46\n",
      "36\n",
      "43\n",
      "62\n",
      "45\n",
      "74\n",
      "85\n",
      "41\n",
      "42\n",
      "44\n",
      "46\n",
      "37\n",
      "54\n",
      "45\n",
      "40\n",
      "64\n",
      "50\n",
      "40\n",
      "86\n",
      "59\n",
      "48\n",
      "78\n",
      "55\n",
      "42\n",
      "108\n",
      "67\n",
      "43\n",
      "48\n",
      "27\n",
      "54\n",
      "28\n",
      "64\n",
      "18\n",
      "61\n",
      "40\n",
      "78\n",
      "62\n",
      "22\n",
      "26\n",
      "27\n",
      "50\n",
      "66\n",
      "103\n",
      "65\n",
      "28\n",
      "31\n",
      "24\n",
      "35\n",
      "94\n",
      "49\n",
      "32\n",
      "73\n",
      "65\n",
      "106\n",
      "70\n",
      "107\n",
      "35\n",
      "39\n",
      "67\n",
      "67\n",
      "34\n",
      "38\n",
      "57\n",
      "71\n",
      "77\n",
      "137\n",
      "42\n",
      "33\n",
      "30\n",
      "54\n",
      "31\n",
      "36\n",
      "43\n",
      "65\n",
      "61\n",
      "50\n",
      "129\n",
      "86\n",
      "57\n",
      "55\n",
      "38\n",
      "54\n",
      "35\n",
      "39\n",
      "76\n",
      "63\n",
      "39\n",
      "54\n",
      "91\n",
      "82\n",
      "38\n",
      "31\n",
      "27\n",
      "40\n",
      "34\n",
      "81\n",
      "70\n",
      "108\n",
      "59\n",
      "84\n",
      "115\n",
      "61\n",
      "36\n",
      "83\n",
      "92\n",
      "129\n",
      "73\n",
      "125\n",
      "103\n",
      "73\n",
      "150\n",
      "133\n",
      "87\n",
      "71\n",
      "123\n",
      "139\n",
      "89\n",
      "126\n",
      "88\n",
      "115\n",
      "111\n",
      "118\n",
      "151\n",
      "76\n",
      "72\n",
      "81\n",
      "77\n",
      "125\n",
      "103\n",
      "80\n",
      "88\n",
      "78\n",
      "78\n",
      "82\n",
      "100\n",
      "74\n",
      "112\n",
      "121\n",
      "153\n",
      "87\n",
      "107\n",
      "146\n",
      "99\n",
      "106\n",
      "171\n",
      "108\n",
      "76\n",
      "76\n",
      "91\n",
      "101\n",
      "101\n",
      "94\n",
      "110\n",
      "127\n",
      "160\n",
      "97\n",
      "131\n",
      "155\n",
      "59\n",
      "73\n",
      "111\n",
      "82\n",
      "37\n",
      "57\n",
      "55\n",
      "77\n",
      "73\n",
      "116\n",
      "98\n",
      "72\n",
      "81\n",
      "77\n",
      "63\n",
      "52\n",
      "85\n",
      "59\n",
      "48\n",
      "79\n",
      "77\n",
      "111\n",
      "75\n",
      "103\n",
      "74\n",
      "63\n",
      "46\n",
      "108\n",
      "100\n",
      "40\n",
      "99\n",
      "136\n",
      "139\n",
      "114\n",
      "44\n",
      "31\n",
      "49\n",
      "104\n",
      "34\n",
      "26\n",
      "30\n",
      "84\n",
      "30\n",
      "14\n",
      "22\n",
      "38\n",
      "37\n",
      "31\n",
      "22\n",
      "30\n",
      "78\n",
      "48\n",
      "30\n",
      "42\n",
      "73\n",
      "43\n",
      "105\n",
      "44\n",
      "75\n",
      "41\n",
      "91\n",
      "134\n",
      "48\n",
      "116\n",
      "48\n",
      "91\n",
      "63\n",
      "65\n",
      "132\n",
      "58\n",
      "60\n",
      "39\n",
      "78\n",
      "106\n",
      "51\n",
      "60\n",
      "93\n",
      "79\n",
      "131\n",
      "48\n",
      "18\n",
      "75\n",
      "87\n",
      "90\n",
      "115\n",
      "64\n",
      "59\n",
      "97\n",
      "96\n",
      "92\n",
      "89\n",
      "100\n",
      "95\n",
      "94\n",
      "132\n",
      "62\n",
      "86\n",
      "75\n",
      "136\n",
      "160\n",
      "102\n",
      "53\n",
      "101\n",
      "19\n",
      "75\n",
      "95\n",
      "26\n",
      "88\n",
      "52\n",
      "59\n",
      "62\n",
      "56\n",
      "46\n",
      "76\n",
      "41\n",
      "65\n",
      "56\n",
      "58\n",
      "76\n",
      "53\n",
      "50\n",
      "47\n",
      "30\n",
      "73\n",
      "70\n",
      "17\n",
      "24\n",
      "61\n",
      "38\n",
      "52\n",
      "71\n",
      "45\n",
      "50\n",
      "26\n",
      "77\n",
      "90\n",
      "21\n",
      "71\n",
      "92\n",
      "105\n",
      "45\n",
      "81\n",
      "118\n",
      "70\n",
      "19\n",
      "65\n",
      "81\n",
      "83\n",
      "74\n",
      "41\n",
      "100\n",
      "53\n",
      "90\n",
      "86\n",
      "96\n",
      "109\n",
      "138\n",
      "79\n",
      "39\n",
      "89\n",
      "23\n",
      "62\n",
      "74\n",
      "54\n",
      "107\n",
      "69\n",
      "70\n",
      "82\n",
      "62\n",
      "129\n",
      "71\n",
      "108\n",
      "85\n",
      "82\n",
      "149\n",
      "162\n",
      "56\n",
      "93\n",
      "120\n",
      "74\n",
      "49\n",
      "107\n",
      "104\n",
      "95\n",
      "147\n",
      "70\n",
      "92\n",
      "46\n",
      "76\n",
      "66\n",
      "137\n",
      "50\n",
      "75\n",
      "121\n",
      "109\n",
      "133\n",
      "67\n",
      "90\n",
      "125\n",
      "71\n",
      "76\n",
      "100\n",
      "73\n",
      "67\n",
      "114\n",
      "88\n",
      "115\n",
      "77\n",
      "104\n",
      "107\n",
      "73\n",
      "132\n",
      "141\n",
      "88\n",
      "119\n",
      "104\n",
      "129\n",
      "88\n",
      "81\n",
      "131\n",
      "95\n",
      "106\n",
      "144\n",
      "72\n",
      "88\n",
      "99\n",
      "68\n",
      "127\n",
      "35\n",
      "15\n",
      "85\n",
      "30\n",
      "63\n",
      "88\n",
      "28\n",
      "72\n",
      "34\n",
      "71\n",
      "44\n",
      "31\n",
      "69\n",
      "66\n",
      "75\n",
      "25\n",
      "38\n",
      "61\n",
      "72\n",
      "46\n",
      "58\n",
      "83\n",
      "30\n",
      "76\n",
      "16\n",
      "28\n",
      "58\n",
      "42\n",
      "34\n",
      "36\n",
      "50\n",
      "66\n",
      "32\n",
      "39\n",
      "40\n",
      "42\n",
      "79\n",
      "52\n",
      "69\n",
      "33\n",
      "63\n",
      "34\n",
      "59\n",
      "65\n",
      "38\n",
      "46\n",
      "72\n",
      "42\n",
      "35\n",
      "39\n",
      "39\n",
      "62\n",
      "66\n",
      "56\n",
      "79\n",
      "43\n",
      "64\n",
      "83\n",
      "113\n",
      "40\n",
      "56\n",
      "83\n",
      "39\n",
      "47\n",
      "74\n",
      "83\n",
      "71\n",
      "52\n",
      "65\n",
      "75\n",
      "85\n",
      "119\n",
      "34\n",
      "66\n",
      "143\n",
      "56\n",
      "56\n",
      "52\n",
      "73\n",
      "74\n",
      "44\n",
      "51\n",
      "76\n",
      "102\n",
      "45\n",
      "80\n",
      "96\n",
      "91\n",
      "31\n",
      "26\n",
      "49\n",
      "27\n",
      "33\n",
      "59\n",
      "62\n",
      "99\n",
      "75\n",
      "108\n",
      "91\n",
      "32\n",
      "46\n",
      "43\n",
      "58\n",
      "22\n",
      "35\n",
      "26\n",
      "38\n",
      "41\n",
      "133\n",
      "60\n",
      "51\n",
      "49\n",
      "55\n",
      "79\n",
      "77\n",
      "63\n",
      "93\n",
      "91\n",
      "72\n",
      "46\n",
      "42\n",
      "36\n",
      "27\n",
      "33\n",
      "27\n",
      "44\n",
      "30\n",
      "60\n",
      "66\n",
      "31\n",
      "68\n",
      "34\n",
      "36\n",
      "13\n",
      "18\n",
      "54\n",
      "32\n",
      "52\n",
      "34\n",
      "61\n",
      "37\n",
      "41\n",
      "35\n",
      "31\n",
      "36\n",
      "73\n",
      "26\n",
      "32\n",
      "69\n",
      "41\n",
      "30\n",
      "72\n",
      "36\n",
      "114\n",
      "114\n",
      "37\n",
      "39\n",
      "40\n",
      "74\n",
      "41\n",
      "44\n",
      "65\n",
      "100\n",
      "43\n",
      "60\n",
      "62\n",
      "68\n",
      "107\n",
      "93\n",
      "46\n",
      "96\n",
      "41\n",
      "57\n",
      "67\n",
      "69\n",
      "9\n",
      "19\n",
      "92\n",
      "15\n",
      "68\n",
      "137\n",
      "35\n",
      "58\n",
      "79\n",
      "116\n",
      "62\n",
      "121\n",
      "75\n",
      "114\n",
      "126\n",
      "77\n",
      "119\n",
      "137\n",
      "98\n",
      "150\n",
      "23\n",
      "78\n",
      "68\n",
      "93\n",
      "59\n",
      "74\n",
      "78\n",
      "136\n",
      "41\n",
      "110\n",
      "56\n",
      "65\n",
      "105\n",
      "127\n",
      "130\n",
      "89\n",
      "75\n",
      "134\n",
      "74\n",
      "118\n",
      "97\n",
      "60\n",
      "90\n",
      "85\n",
      "72\n",
      "137\n",
      "170\n",
      "162\n",
      "153\n",
      "104\n",
      "66\n",
      "120\n",
      "110\n",
      "119\n",
      "140\n",
      "93\n",
      "152\n",
      "184\n",
      "125\n",
      "58\n",
      "109\n",
      "162\n",
      "131\n",
      "164\n",
      "141\n",
      "79\n",
      "99\n",
      "56\n",
      "28\n",
      "59\n",
      "73\n",
      "29\n",
      "47\n",
      "48\n",
      "71\n",
      "27\n",
      "48\n",
      "68\n",
      "108\n",
      "47\n",
      "60\n",
      "70\n",
      "87\n",
      "37\n",
      "41\n",
      "24\n",
      "44\n",
      "38\n",
      "41\n",
      "70\n",
      "35\n",
      "63\n",
      "96\n",
      "69\n",
      "27\n",
      "42\n",
      "31\n",
      "68\n",
      "43\n",
      "80\n",
      "52\n",
      "38\n",
      "56\n",
      "76\n",
      "49\n",
      "59\n",
      "36\n",
      "84\n",
      "38\n",
      "22\n",
      "45\n",
      "97\n",
      "52\n",
      "24\n",
      "51\n",
      "32\n",
      "50\n",
      "57\n",
      "45\n",
      "43\n",
      "24\n",
      "37\n",
      "123\n",
      "66\n",
      "55\n",
      "37\n",
      "80\n",
      "56\n",
      "99\n",
      "59\n",
      "85\n",
      "26\n",
      "32\n",
      "47\n",
      "56\n",
      "37\n",
      "74\n",
      "63\n",
      "72\n",
      "40\n",
      "46\n",
      "37\n",
      "60\n",
      "79\n",
      "129\n",
      "78\n",
      "48\n",
      "73\n",
      "42\n",
      "43\n",
      "89\n",
      "48\n",
      "53\n",
      "49\n",
      "51\n",
      "65\n",
      "47\n",
      "54\n",
      "91\n",
      "50\n",
      "58\n",
      "53\n",
      "76\n",
      "37\n",
      "74\n",
      "81\n",
      "57\n",
      "111\n",
      "30\n",
      "31\n",
      "28\n",
      "41\n",
      "93\n",
      "59\n",
      "65\n",
      "53\n",
      "30\n",
      "43\n",
      "68\n",
      "72\n",
      "68\n",
      "75\n",
      "52\n",
      "76\n",
      "45\n",
      "79\n",
      "77\n",
      "39\n",
      "46\n",
      "18\n",
      "31\n",
      "33\n",
      "63\n",
      "52\n",
      "90\n",
      "82\n",
      "85\n",
      "32\n",
      "47\n",
      "43\n",
      "73\n",
      "56\n",
      "108\n",
      "89\n",
      "65\n",
      "90\n",
      "78\n",
      "69\n",
      "51\n",
      "65\n",
      "47\n",
      "57\n",
      "39\n",
      "107\n",
      "45\n",
      "40\n",
      "41\n",
      "107\n",
      "127\n",
      "82\n",
      "60\n",
      "78\n",
      "49\n",
      "69\n",
      "70\n",
      "80\n",
      "72\n",
      "70\n",
      "51\n",
      "90\n",
      "67\n",
      "79\n",
      "86\n",
      "81\n",
      "107\n",
      "77\n",
      "55\n",
      "107\n",
      "45\n",
      "79\n",
      "92\n",
      "65\n",
      "73\n",
      "38\n",
      "80\n",
      "33\n",
      "89\n",
      "73\n",
      "86\n",
      "87\n",
      "79\n",
      "38\n",
      "75\n",
      "130\n",
      "109\n",
      "33\n",
      "28\n",
      "129\n",
      "99\n",
      "79\n",
      "106\n",
      "64\n",
      "152\n",
      "42\n",
      "61\n",
      "117\n",
      "63\n",
      "31\n",
      "58\n",
      "29\n",
      "75\n",
      "33\n",
      "62\n",
      "48\n",
      "47\n",
      "73\n",
      "110\n",
      "75\n",
      "112\n",
      "53\n",
      "49\n",
      "54\n",
      "87\n",
      "66\n",
      "87\n",
      "52\n",
      "74\n",
      "73\n",
      "77\n",
      "55\n",
      "91\n",
      "140\n",
      "86\n",
      "61\n",
      "103\n",
      "140\n",
      "79\n",
      "60\n",
      "23\n",
      "21\n",
      "27\n",
      "54\n",
      "50\n",
      "44\n",
      "62\n",
      "61\n",
      "60\n",
      "36\n",
      "52\n",
      "31\n",
      "29\n",
      "37\n",
      "34\n",
      "66\n",
      "64\n",
      "50\n",
      "80\n",
      "113\n",
      "92\n",
      "189\n",
      "148\n",
      "89\n",
      "33\n",
      "60\n",
      "104\n",
      "142\n",
      "88\n",
      "149\n",
      "72\n",
      "85\n",
      "66\n",
      "122\n",
      "71\n",
      "54\n",
      "136\n",
      "56\n",
      "92\n",
      "113\n",
      "93\n",
      "60\n",
      "85\n",
      "52\n",
      "75\n",
      "44\n",
      "29\n",
      "40\n",
      "60\n",
      "90\n",
      "44\n",
      "48\n",
      "56\n",
      "74\n",
      "46\n",
      "109\n",
      "55\n",
      "119\n",
      "156\n",
      "92\n",
      "92\n",
      "80\n",
      "55\n",
      "68\n",
      "56\n",
      "45\n",
      "85\n",
      "94\n",
      "42\n",
      "94\n",
      "30\n",
      "92\n",
      "69\n",
      "39\n",
      "81\n",
      "73\n",
      "91\n",
      "114\n",
      "83\n",
      "67\n",
      "106\n",
      "87\n",
      "100\n",
      "89\n",
      "49\n",
      "58\n",
      "124\n",
      "93\n",
      "39\n",
      "92\n",
      "38\n",
      "37\n",
      "43\n",
      "87\n",
      "63\n",
      "80\n",
      "54\n",
      "54\n",
      "77\n",
      "58\n",
      "97\n",
      "92\n",
      "68\n",
      "70\n",
      "74\n",
      "60\n",
      "80\n",
      "97\n",
      "103\n",
      "58\n",
      "64\n",
      "99\n",
      "139\n",
      "117\n",
      "115\n",
      "155\n",
      "97\n",
      "117\n",
      "70\n",
      "112\n",
      "70\n",
      "77\n",
      "116\n",
      "83\n",
      "75\n",
      "68\n",
      "79\n",
      "85\n",
      "97\n",
      "110\n",
      "77\n",
      "121\n",
      "104\n",
      "100\n",
      "125\n",
      "162\n",
      "51\n",
      "100\n",
      "61\n",
      "102\n",
      "130\n",
      "91\n",
      "114\n",
      "91\n",
      "91\n",
      "81\n",
      "105\n",
      "95\n",
      "82\n",
      "97\n",
      "135\n",
      "149\n",
      "84\n",
      "88\n",
      "106\n",
      "117\n",
      "87\n",
      "95\n",
      "102\n",
      "88\n",
      "125\n",
      "133\n",
      "156\n",
      "104\n",
      "112\n",
      "112\n",
      "97\n",
      "135\n",
      "76\n",
      "89\n",
      "93\n",
      "137\n",
      "39\n",
      "63\n",
      "122\n",
      "87\n",
      "61\n",
      "74\n",
      "110\n",
      "64\n",
      "57\n",
      "105\n",
      "100\n",
      "120\n",
      "61\n",
      "98\n",
      "72\n",
      "72\n",
      "27\n",
      "47\n",
      "89\n",
      "42\n",
      "52\n",
      "45\n",
      "85\n",
      "42\n",
      "44\n",
      "70\n",
      "35\n",
      "85\n",
      "28\n",
      "51\n",
      "58\n",
      "53\n",
      "36\n",
      "69\n",
      "90\n",
      "76\n",
      "73\n",
      "72\n",
      "92\n",
      "51\n",
      "67\n",
      "65\n",
      "102\n",
      "95\n",
      "129\n",
      "102\n",
      "90\n",
      "63\n",
      "86\n",
      "27\n",
      "56\n",
      "109\n",
      "52\n",
      "79\n",
      "69\n",
      "75\n",
      "74\n",
      "53\n",
      "68\n",
      "81\n",
      "82\n",
      "122\n",
      "61\n",
      "61\n",
      "94\n",
      "146\n",
      "92\n",
      "129\n",
      "65\n",
      "97\n",
      "55\n",
      "89\n",
      "115\n",
      "60\n",
      "60\n",
      "79\n",
      "63\n",
      "78\n",
      "65\n",
      "60\n",
      "76\n",
      "92\n",
      "120\n",
      "179\n",
      "177\n",
      "105\n",
      "93\n",
      "145\n",
      "77\n",
      "104\n",
      "86\n",
      "91\n",
      "111\n",
      "192\n",
      "134\n",
      "62\n",
      "137\n",
      "95\n",
      "67\n",
      "96\n",
      "63\n",
      "90\n",
      "82\n",
      "151\n",
      "38\n",
      "36\n",
      "62\n",
      "48\n",
      "51\n",
      "57\n",
      "72\n",
      "38\n",
      "47\n",
      "50\n",
      "57\n",
      "54\n",
      "61\n",
      "72\n",
      "79\n",
      "56\n",
      "71\n",
      "56\n",
      "53\n",
      "70\n",
      "31\n",
      "76\n",
      "37\n",
      "38\n",
      "66\n",
      "99\n",
      "47\n",
      "45\n",
      "40\n",
      "46\n",
      "53\n",
      "72\n",
      "58\n",
      "97\n",
      "118\n",
      "60\n",
      "64\n",
      "25\n",
      "54\n",
      "73\n",
      "45\n",
      "60\n",
      "104\n",
      "114\n",
      "85\n",
      "80\n",
      "71\n",
      "120\n",
      "29\n",
      "40\n",
      "42\n",
      "64\n",
      "102\n",
      "48\n",
      "42\n",
      "80\n",
      "62\n",
      "85\n",
      "85\n",
      "89\n",
      "75\n",
      "106\n",
      "143\n",
      "99\n",
      "69\n",
      "81\n",
      "100\n",
      "44\n",
      "81\n",
      "133\n",
      "82\n",
      "74\n",
      "48\n",
      "82\n",
      "44\n",
      "52\n",
      "49\n",
      "51\n",
      "32\n",
      "57\n",
      "52\n",
      "47\n",
      "77\n",
      "58\n",
      "80\n",
      "62\n",
      "79\n",
      "102\n",
      "83\n",
      "65\n",
      "68\n",
      "37\n",
      "63\n",
      "49\n",
      "62\n",
      "99\n",
      "111\n",
      "67\n",
      "81\n",
      "74\n",
      "94\n",
      "50\n",
      "49\n",
      "66\n",
      "46\n",
      "90\n",
      "48\n",
      "53\n",
      "128\n",
      "59\n",
      "63\n",
      "53\n",
      "55\n",
      "57\n",
      "112\n",
      "56\n",
      "69\n",
      "106\n",
      "57\n",
      "58\n",
      "34\n",
      "59\n",
      "96\n",
      "60\n",
      "107\n",
      "55\n",
      "82\n",
      "120\n",
      "125\n",
      "52\n",
      "98\n",
      "86\n",
      "110\n",
      "118\n",
      "104\n",
      "111\n",
      "48\n",
      "55\n",
      "63\n",
      "95\n",
      "72\n",
      "73\n",
      "81\n",
      "83\n",
      "120\n",
      "44\n",
      "52\n",
      "75\n",
      "65\n",
      "76\n",
      "70\n",
      "56\n",
      "49\n",
      "58\n",
      "91\n",
      "88\n",
      "70\n",
      "63\n",
      "83\n",
      "52\n",
      "52\n",
      "58\n",
      "81\n",
      "58\n",
      "78\n",
      "65\n",
      "117\n",
      "98\n",
      "100\n",
      "65\n",
      "57\n",
      "60\n",
      "62\n",
      "72\n",
      "68\n",
      "73\n",
      "70\n",
      "77\n",
      "97\n",
      "102\n",
      "84\n",
      "115\n",
      "87\n",
      "111\n",
      "82\n",
      "93\n",
      "130\n",
      "145\n",
      "103\n",
      "88\n",
      "89\n",
      "72\n",
      "81\n",
      "80\n",
      "138\n",
      "60\n",
      "89\n",
      "128\n",
      "51\n",
      "104\n",
      "75\n",
      "112\n",
      "98\n",
      "136\n",
      "89\n",
      "53\n",
      "89\n",
      "54\n",
      "109\n",
      "125\n",
      "111\n",
      "63\n",
      "100\n",
      "73\n",
      "125\n",
      "130\n",
      "110\n",
      "116\n",
      "82\n",
      "101\n",
      "40\n",
      "37\n",
      "44\n",
      "45\n",
      "42\n",
      "71\n",
      "51\n",
      "45\n",
      "26\n",
      "37\n",
      "60\n",
      "67\n",
      "39\n",
      "44\n",
      "75\n",
      "102\n",
      "124\n",
      "100\n",
      "130\n",
      "49\n",
      "142\n",
      "43\n",
      "56\n",
      "75\n",
      "89\n",
      "64\n",
      "69\n",
      "43\n",
      "54\n",
      "73\n",
      "49\n",
      "33\n",
      "77\n",
      "60\n",
      "46\n",
      "51\n",
      "128\n",
      "47\n",
      "91\n",
      "56\n",
      "100\n",
      "57\n",
      "58\n",
      "51\n",
      "58\n",
      "62\n",
      "56\n",
      "67\n",
      "79\n",
      "99\n",
      "72\n",
      "91\n",
      "97\n",
      "153\n",
      "84\n",
      "68\n",
      "68\n",
      "47\n",
      "68\n",
      "66\n",
      "35\n",
      "65\n",
      "98\n",
      "137\n",
      "54\n",
      "93\n",
      "50\n",
      "62\n",
      "78\n",
      "51\n",
      "68\n",
      "105\n",
      "67\n",
      "74\n",
      "100\n",
      "72\n",
      "53\n",
      "48\n",
      "110\n",
      "123\n",
      "63\n",
      "62\n",
      "92\n",
      "101\n",
      "141\n",
      "78\n",
      "64\n",
      "116\n",
      "89\n",
      "48\n",
      "61\n",
      "60\n",
      "63\n",
      "84\n",
      "93\n",
      "64\n",
      "98\n",
      "87\n",
      "63\n",
      "73\n",
      "60\n",
      "66\n",
      "86\n",
      "55\n",
      "62\n",
      "120\n",
      "150\n",
      "99\n",
      "173\n",
      "192\n",
      "73\n",
      "64\n",
      "73\n",
      "162\n",
      "90\n",
      "109\n",
      "76\n",
      "37\n",
      "66\n",
      "76\n",
      "56\n",
      "40\n",
      "45\n",
      "49\n",
      "84\n",
      "63\n",
      "74\n",
      "111\n",
      "61\n",
      "109\n",
      "100\n",
      "105\n",
      "66\n",
      "62\n",
      "64\n",
      "102\n",
      "70\n",
      "32\n",
      "76\n",
      "112\n",
      "55\n",
      "59\n",
      "68\n",
      "85\n",
      "88\n",
      "79\n",
      "112\n",
      "64\n",
      "54\n",
      "88\n",
      "62\n",
      "36\n",
      "53\n",
      "47\n",
      "48\n",
      "58\n",
      "42\n",
      "55\n",
      "56\n",
      "51\n",
      "55\n",
      "67\n",
      "51\n",
      "49\n",
      "28\n",
      "40\n",
      "74\n",
      "47\n",
      "80\n",
      "44\n",
      "67\n",
      "72\n",
      "76\n",
      "70\n",
      "52\n",
      "67\n",
      "104\n",
      "52\n",
      "102\n",
      "50\n",
      "59\n",
      "79\n",
      "87\n",
      "51\n",
      "57\n",
      "91\n",
      "65\n",
      "46\n",
      "63\n",
      "59\n",
      "70\n",
      "56\n",
      "41\n",
      "78\n",
      "43\n",
      "48\n",
      "56\n",
      "46\n",
      "50\n",
      "88\n",
      "51\n",
      "53\n",
      "83\n",
      "89\n",
      "59\n",
      "60\n",
      "106\n",
      "83\n",
      "116\n",
      "66\n",
      "79\n",
      "118\n",
      "57\n",
      "60\n",
      "67\n",
      "90\n",
      "97\n",
      "86\n",
      "72\n",
      "99\n",
      "84\n",
      "75\n",
      "75\n",
      "93\n",
      "100\n",
      "77\n",
      "48\n",
      "39\n",
      "49\n",
      "49\n",
      "122\n",
      "50\n",
      "61\n",
      "82\n",
      "79\n",
      "121\n",
      "89\n"
     ]
    }
   ],
   "source": [
    "#EulerProject 第42题\n",
    "f = open('p042_words.txt')\n",
    "m = f.read()\n",
    "lm = m.replace('\"','')\n",
    "lists = lm.split(',')\n",
    "max_index = 10\n",
    "tri_num = [1, 3, 6, 10, 15, 21, 28, 36, 45, 55]\n",
    "res = 0\n",
    "for word in lists:\n",
    "    word_num = sum(map(lambda x:ord(x)-65+1,list(str(word))))\n",
    "    if word_num<=tri_num[-1]:\n",
    "        if word_num in tri_num:\n",
    "            res += 1\n",
    "    else:\n",
    "        max_tri = tri_num[-1]\n",
    "        while max_tri<=word_num:\n",
    "            if max_tri==word_num:\n",
    "                res += 1\n",
    "                break\n",
    "            max_index += 1 \n",
    "            next_tri = max_tri + max_index\n",
    "            tri_num.append(next_tri)\n",
    "            max_tri = next_tri\n",
    "print(res)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "10"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ord('K')-ord('A')+1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python [Root]",
   "language": "python",
   "name": "Python [Root]"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
